package study.JavaBase;

/**
 * date:2025.10.11
 * title:java修饰符
 * author:fzy
 */
public class Java_4 {
    public static void main(String[] args) {

    }
}


/**
 * 访问修饰符
 * default:什么也不写，同包可见
 * private：同类可见，不能修饰外部类
 * public：所有类可见
 * protected：类和子类可见：同包中子类可以使用父类的实例访问或者直接使用子类的方法，不同包，子类不可以使用父类的实例来访问
 * 父类中为public的变量子类也必须为public
 * 父类中为protected的变量，子类必须为public或者protect，不能声明为private
 * 父类中private的变量，子类不可用
 */
class AccessModifier {
    int a = 1;
    private int b = 2;
    public char c = '3';
    protected String e = "4";
    void getData() {
        b = 2;
    }
    int getData2() {
        return b;
    }
}

/**
 * 非访问修饰符
 * static:静态变量和方法，不多说
 * final:表示最终的，不能被修改或者继承
 * abstract:抽象，不能实现，为了给这个类扩充，存在抽象方法的必须是抽象类，抽象类可以包括非抽象方法,不能同时被abstract和final修饰，父类必须实现所有抽象方法
 * synchronized :声明的方法表示同时只能被一个线程访问
 * transient ：用来预处理类和变量的数据类型，jvm会跳过被transient修饰的变量
 * volatile：每次被线程访问都会强制重新在内存读取
 */
final class NonAccessModifier {
    static int a = 0;
    final  int d =  2;
    final static int c =2;

}

abstract class AbstractClass{
    abstract void toFinish();
    int getNum(){
        return 1;
    }
}
class FinalClass extends AbstractClass{
    void toFinish(){}
}

/*
this的内存原理
this指向调用者的内存
方法被哪个对象调用，this指向哪个对象
 */
